package com.hzw.saas.common.flow.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzw.saas.common.config.util.PageParam;
import com.hzw.saas.common.flow.pojo.bo.FlowInstanceBO;
import com.hzw.saas.common.flow.pojo.model.FlowInstance;

/**
 * <p>
 * 流程实例服务类
 * </p>
 *
 * @author sonam
 * @since 2021-08-04
 */
public interface IFlowInstanceService extends IService<FlowInstance> {

    /**
     * 获取流程实例列表
     *
     * @param pageParam 分页参数
     * @param userId    指定用户ID，为空则忽略
     * @param flowId    指定流程定义ID，为空则忽略
     * @return 流程实例分页列表
     */
    IPage<FlowInstanceBO> pageFlowInstance(PageParam pageParam, String userId, String flowId);

    /**
     * 创建一个流程实例/发起流程
     *
     * @param userId           提交人
     * @param flowId           流程ID
     * @param flowInstanceName 流程名称
     * @return 创建的流程实例
     */
    FlowInstance createFlowInstance(String userId, String flowId, String flowInstanceName);

    /**
     * 处理下一个节点
     *
     * @param flowInstanceId 流程实例ID
     * @param flowProcessId  下一个流程处理节点
     * @param userId         审批人ID
     * @param suggestion     流程审批建议
     */
    FlowInstance doFlowProcess(String flowInstanceId, String flowProcessId, String userId, String suggestion);

}
